package com.shujia.basis;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.*;

public class Demo2Collection {
    public static void main(String[] args) throws Exception {

        /**
         * Arraylist   底层是数组   不唯一有序   通过下标查询快  随机增删慢
         *      initialCapacity   初始容量
         * HashSet   唯一无序   判断某个元素是否再集合中存在快
         * Hashmap  kv格式  可以实现分组
         *
         * Iterator  只能迭代一次
         *  hasNext  判断是否有下一个元素
         *  next 取出下一个元素
         */
        ArrayList<Integer> integers = new ArrayList<>(10000);
        integers.add(1);
        integers.add(2);
        integers.add(3);
        integers.add(12);
        integers.add(4);

        for (Integer integer : integers) {
            System.out.println(integer);
        }

        System.out.println("========");

        for (Integer integer : integers) {
            System.out.println(integer);
        }

        System.out.println("------------------");

        Iterator<Integer> iterator = integers.iterator();

        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

        System.out.println("------------------");

        //两次迭代取不到元素
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

        HashSet<Integer> integers1 = new HashSet<>();

        integers1.iterator();

        System.out.println("------------------");
        integers.sort(new MySort());

        for (Integer integer : integers) {
            System.out.println(integer);
        }

        System.out.println("------------------");
        ArrayList<String> strings = new ArrayList<>();

        strings.add("aa");
        strings.add("ab");
        strings.add("ac");
        strings.add("ba");
        strings.add("ad");

        //匿名内部类
        strings.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //字典顺序
                return -o1.compareTo(o2);
            }
        });

        for (String string : strings) {
            System.out.println(string);
        }


        /**
         *
         * hashMap  通过key获取value很快
         *
         *
         *
         */

        HashMap<Integer, String> hashMap = new HashMap<>();
        hashMap.put(100, "张三");
        hashMap.put(200, "李四");
        hashMap.put(300, "王五");

        System.out.println(hashMap.get(100));

        //hashmao遍历
        for (Map.Entry<Integer, String> entry : hashMap.entrySet()) {
            System.out.println(entry.getKey() + "\t" + entry.getValue());
        }

        for (Integer key : hashMap.keySet()) {
            System.out.println(key + "\t" + hashMap.get(key));
        }

        //统计班级人数
        BufferedReader reader = new BufferedReader(new FileReader("java/data/students.txt"));

        //key是班级  value 是人数
        HashMap<String, Integer> number = new HashMap<>();

        String line;
        while ((line = reader.readLine()) != null) {
            String clazz = line.split(",")[4];

            if (number.containsKey(clazz)) {
                //取出之前的统计结果
                Integer integer = number.get(clazz);
                number.put(clazz, integer + 1);
            } else {
                //读一次循环到这个班级
                number.put(clazz, 1);
            }
        }

        System.out.println(number);


    }
}

/**
 * 自定义排序规则
 */
class MySort implements Comparator<Integer> {
    /**
     * compare  比较两个元素谁排前面谁排后面
     * 如果返回负数  o1  排前面
     * 如果返回正数o2排前面
     */
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2 - o1;
    }
}
